Skip to content

Complete the RUE spell catalog: 156 spells across levels 1-15, real healing content#45

Merged
StreamDemon merged 6 commits into
mainfrom
feat/spells-5-15
Jul 6, 2026
Merged

Complete the RUE spell catalog: 156 spells across levels 1-15, real healing content#45
StreamDemon merged 6 commits into
mainfrom
feat/spells-5-15

Conversation

@StreamDemon

@StreamDemon StreamDemon commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Closes #13.

The RUE spell catalog is complete: 156 spells, levels 1–15 (was 29), every entry page-stamped and transcribed from rendered pages (printed = PDF − 3, pp.198–225).

Content

  • Levels 2–4 were only partially transcribed (5/13, 9/17, 5/16) — the gaps are filled first (27 spells, pp.200–206), then levels 5–15 (100 spells, pp.206–225). Full per-level counts now: 10 / 13 / 17 / 16 / 18 / 12 / 14 / 18 / 8 / 12 / 6 / 5 / 2 / 3 / 2, pinned in tests.
  • Five real healing spells land on the Recovery rates & healing spells: rest/meditation/ley draw, treatment days, spell healing with targets #41/Recovery rates & healing spells: rest/meditation/ley draw, treatment days, spell targets #42 plumbing, each with the structured healing field: Heal Wounds (L5), Heal Self (L7, self), Light Healing (L3, either/or, others-only), Greater Healing (L8, others-only), Restoration (L14, full).
  • Printed oddities captured faithfully: variable/conditional costs as the new ppeNote (Manipulate Objects "2 P.P.E. per five pounds", Ley Line Tendril Bolts "half for Ley Line Walkers", Close Rift's permanent 2 P.P.E. drain, Amulet's 290–500 variants), damage lines as printed strings, save quirks as savingThrowNote.

Schema & engine

  • spellHealingSchema gains exclusive (restores ONE declared pool per cast, caster's choice — Light Healing's "1D6 S.D.C. or 1D4 H.P."), othersOnly (cannot target the caster), and full (complete restoration, no dice — Restoration), with cross-field refinements.
  • rollSpellHealing(spell, rng, pool?) — throws for exclusive spells without a chosen pool (before any spend), returns { full: true } for restorations.

Backend

Web

  • Casts pick the wounded pool for exclusive heals (H.P. if down, else S.D.C.) until a target picker exists.
  • No other UI changes needed: heal results were already logged (> CAST :: HEAL SELF — 20 P.P.E. [194/214] → H.P. +1 · S.D.C. +15), unaffordable spells (Restoration at 750) already render dead-steel.

Validation

  • vp check clean; 219 tests (was 213): per-level catalog counts, healing-shape schema refinements, 8 healing-cast e2e tests on real spells (touch/self/exclusive/others-only/full/clamp/course-reset/atomicity).
  • Browser QA on a seeded L5 Walker who knows the healing suite: Heal Self +1 H.P./+15 S.D.C. with the spend in one write, Light Healing self-cast refused with the book's reason, Restoration correctly unaffordable, Heal Wounds self-cast clamped at full S.D.C.

Builder note: the Ley Line Walker's initial picks ("3 from each of levels 1–4") now draw from the complete L1–4 lists; level-up picks (max spell level = character level) now have content all the way to 15.


Summary by cubic

Completes the RUE spell catalog with 156 spells (levels 1–15) and adds real healing rules (exclusive, others‑only, full restoration) wired through engine, backend, and web.

  • New Features

    • Content: added levels 2–15 with per-level counts; captured printed quirks via ppeNote and savingThrowNote.
    • Healing: schema adds exclusive, othersOnly, and full with cross-field checks (e.g., forbid uncastable othersOnly + self-target); rollSpellHealing(spell, rng, pool?) requires a pool for exclusive heals and returns { full: true } for restorations.
    • Backend: castSpell adds healPool, rejects othersOnly on self, and resolves full restorations to exact top-ups (incl. from negative H.P.); spend and heal stay atomic.
    • Web: exclusive heals auto-pick the wounded pool (H.P. if down, else S.D.C.) until a target picker exists.
    • Tests: 219 tests; healing e2e run on real spells; the mocked catalog is removed.
  • Migration

    • Pass healPool ("hitPoints" or "sdc") to castSpell when casting exclusive heals like light-healing; missing pool throws before spending.
    • Expect healed to include only rolled pools; restorations return full top-ups; othersOnly heals (e.g., greater-healing, light-healing) error on self-cast.

Written for commit f993a64. Summary will update on new commits.

Review in cubic

StreamDemon added 5 commits July 6, 2026 16:02
The catalog claimed levels 1-4 but only level 1 was complete. Adds the
missing L2 (8), L3 (8), L4 (11) spells, page-stamped. New schema fields:
ppeNote for variable printed costs, healing.exclusive for either/or
effects (Light Healing), healing.othersOnly for not-self spells.
…plete at 156

Restoration carries the new healing.full shape (complete restoration,
no dice). Variable/conditional costs captured as ppeNote (Amulet
variants, Close Rift's permanent 2 P.P.E., Rift Teleportation's
half-cost classes).
…ers-only, full restoration

rollSpellHealing gains a pool choice (exclusive either/or spells throw
without one) and the full-restoration marker; castSpell gains healPool,
refuses others-only spells aimed at the caster, and resolves full
restorations to exact top-ups (coma-band H.P. included). Healing-cast
tests now run against the real catalog (Heal Wounds/Heal Self/Light
Healing/Greater Healing/Restoration) — the vi.mock catalog graft is gone.
Web: exclusive heals default to the wounded pool.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found across 8 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread apps/web/src/pages/character-sheet.tsx
Comment thread packages/rules/src/schema/spells.ts
Comment thread packages/rules/src/schema/spells.ts Outdated
Comment thread packages/backend/tests/healing-cast.test.ts
…est ppe-cost comment, target-picker note on healPool selection, Heal Self test bounds

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 issues found across 3 files (changes from recent commits).

Requires human review: Auto-approval blocked by 1 unresolved issue from previous reviews.

Re-trigger cubic

@StreamDemon StreamDemon merged commit 833f44b into main Jul 6, 2026
2 checks passed
@StreamDemon StreamDemon deleted the feat/spells-5-15 branch July 6, 2026 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Complete the spell list (levels 5-15)

1 participant